package com.zhanghp.class06;

import com.zhanghp.refer.TreeNode;

/**
 * <h1>二叉树路径总和</h1>
 * <p>给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径，这条路径上所有节点值相加等于目标和 targetSum 。如果存在，返回 true ；否则，返回 false 。</p>
 * <p>叶子节点 是指没有子节点的节点。</p>
 * <a href = "https://leetcode.cn/problems/path-sum">leetcode</a>
 *
 * @author zhp
 * @since 2024/1/23 18:03
 */
public class Code04_PathSum {

    /**
     * 满足指定总和标识
     */
    public static boolean isFlag = false;

    public boolean hasPathSum(TreeNode root, int sum) {
        if (root == null) {
            return false;
        }
        isFlag = false;
        process(root, 0, sum);
        return isFlag;
    }

    public void process(TreeNode x, int preSum, int sum) {
        // 判断左右树为空时，判断和是否相等
        if (x.left == null && x.right == null) {
            if (sum == preSum + x.val) {
                isFlag = true;
            }
            return;
        }
        // 累加和加当前节点
        preSum += x.val;
        // 左树判断
        if (x.left != null) {
            process(x.left, preSum, sum);
        }
        // 右树判断
        if (x.right != null) {
            process(x.right, preSum, sum);
        }
    }
}
